<?php
    function kinnitaEtParinguleSaadiTulemus($andmebaasiltVastusenaSaadudTulemus)
    {
        if (!$andmebaasiltVastusenaSaadudTulemus)
        {
            die('Päring andmebaasist ebaõnnestus: ' . mysql_error());
        }
    }
    
    function valjastaKoikMenyyTeemad($andmebaasiYhendus, $avalikVeebileht = false)
    {
        //Andmebaasipäring
        $paringMenyyTeemadeSaamiseks = 'SELECT * FROM teema';
        //Et reguleerida seda, mida avalikkus näeb, mida admin näeb
        if ($avalikVeebileht)
        {
            $paringMenyyTeemadeSaamiseks .= ' WHERE on_nahtav = 1';
        }
        $paringMenyyTeemadeSaamiseks .= ' ORDER BY positsioon';
        $vastuseksSaadudMenyyTeemad = mysql_query($paringMenyyTeemadeSaamiseks, $andmebaasiYhendus);
        kinnitaEtParinguleSaadiTulemus($vastuseksSaadudMenyyTeemad);
        return $vastuseksSaadudMenyyTeemad;
    }
    
    //NB! SIIN ÜKS PARAMEETER JUURDE PANDUD MEETODILE!!!
    function valjastaKoikLehedMisMenyyTeemaAll($menyyTeemaID, $andmebaasiYhendus, $avalikVeebileht = true)
    {
        //Tühikuid mitte unustada!
        $paringLehekylgedeJaoksMisMenyyTeemaAll = 'SELECT * FROM lehekylg';
        $paringLehekylgedeJaoksMisMenyyTeemaAll .= ' WHERE teema_ID = ' . $menyyTeemaID;
        if ($avalikVeebileht)
        {
            $paringLehekylgedeJaoksMisMenyyTeemaAll .= ' AND on_nahtav = 1';
        }
        $lehekyljedMisTeemaAllTulemus = mysql_query($paringLehekylgedeJaoksMisMenyyTeemaAll,
                        $andmebaasiYhendus);
        kinnitaEtParinguleSaadiTulemus($lehekyljedMisTeemaAllTulemus);
        return $lehekyljedMisTeemaAllTulemus;
    }
    
    function saaPealeheleVastavAndmebaasiRida()
    {
        global $andmebaasiYhendus;
        $paring = 'SELECT * ';
        $paring .= 'FROM teema ';
        $paring .= 'WHERE teema_nimi = "Pealeht" '; 
        $paring .= 'LIMIT 1;';
        $tulemus = mysql_query($paring, $andmebaasiYhendus);
        kinnitaEtParinguleSaadiTulemus($tulemus);
        //Et vastuseks tuleb vaid üks rida, pole seda vaja läbi itereerida
        //Seepeale anname otse siin ära muidu enne while tsükli tingimuseks 
        //oleva käsu. Võib juhtuda, et vastuseks ei saadud midagi, päringu 
        //kinnitamise funktsioon andis käsu die(). Seda tuleb aga kontrollida.
        //Seda saame teha tänu sellele, et ebaõnnestumisel annab mysql_fetch()
        //funktsioon väärtuseks false;
        if ($vastuseksSaadudRidaTeemalePealeht = mysql_fetch_array($tulemus))
        {
            return $vastuseksSaadudRidaTeemalePealeht;
        }
        else
        {
            return NULL;
        }
    }
    
    function saaMenyyTeemaIDJargiVastavAndmebaasiRida($teema_ID)
    {   
        global $andmebaasiYhendus;
        //Tühikuid mitte unustada! Sellist süntaksit kasutame selleks, et 
        //nii saab päringu osasid kergelt välja kommenteerida
        $paring = 'SELECT * ';
        $paring .= 'FROM teema ';
        $paring .= 'WHERE teema_ID =' . $teema_ID . ' '; 
        $paring .= 'LIMIT 1;';
        $tulemus = mysql_query($paring, $andmebaasiYhendus);
        kinnitaEtParinguleSaadiTulemus($tulemus);
        //Et vastuseks tuleb vaid üks rida, pole seda vaja läbi itereerida
        //Seepeale anname otse siin ära muidu enne while tsükli tingimuseks 
        //oleva käsu. Võib juhtuda, et vastuseks ei saadud midagi, päringu 
        //kinnitamise funktsioon andis käsu die(). Seda tuleb aga kontrollida.
        //Seda saame teha tänu sellele, et ebaõnnestumisel annab mysql_fetch()
        //funktsioon väärtuseks false;
        if ($vastuseksSaadudMenyyElemendiTeema = mysql_fetch_array($tulemus))
        {
            return $vastuseksSaadudMenyyElemendiTeema;
        }
        else
        {
            return NULL;
        }  
     }
     
    function saaValitudLehekyljeIDJargiVastavAndmebaasiRida($valitudLehekylgID)
    {   
        global $andmebaasiYhendus;
        //Tühikuid mitte unustada! Sellist süntaksit kasutame selleks, et 
        //nii saab päringu osasid kergelt välja kommenteerida
        $paring = 'SELECT * ';
        $paring .= 'FROM lehekylg ';
        $paring .= 'WHERE lehekylg_ID =' . $valitudLehekylgID . ' '; 
        $paring .= 'LIMIT 1;';
        $tulemus = mysql_query($paring, $andmebaasiYhendus);
        kinnitaEtParinguleSaadiTulemus($tulemus);
        //Et vastuseks tuleb vaid üks rida, pole seda vaja läbi itereerida
        //Seepeale anname otse siin ära muidu enne while tsükli tingimuseks 
        //oleva käsu. Võib juhtuda, et vastuseks ei saadud midagi, päringu 
        //kinnitamise funktsioon andis käsu die(). Seda tuleb aga kontrollida.
        //Seda saame teha tänu sellele, et ebaõnnestumisel annab mysql_fetch()
        //funktsioon väärtuseks false;
        if ($vastuseksSaadudRidaValitudLehekyljeTeemale = mysql_fetch_array($tulemus))
        {
            return $vastuseksSaadudRidaValitudLehekyljeTeemale;
        }
        else
        {
            return NULL;
        }  
     }
     
     function tagastaValitudTeemaVoiLehekylg()
     {
        //Et siinsed muutujad oleks hiljem globaalselt kättesaadavad
        global $vastuseksSaadudRidaValitudMenyyTeemale;
        global $vastuseksSaadudRidaValitudLehekyljeTeemale;
        global $andmebaasiYhendus;
        if (isset($_GET['teema_ID']))
        {
            //Kuna tulemus on rida, siis muutub $valitud_menyyTeemaID_URLilt massiivitüüpi muutujaks
            $vastuseksSaadudRidaValitudMenyyTeemale = saaMenyyTeemaIDJargiVastavAndmebaasiRida($_GET['teema_ID']);
            //Siin pole veel lehekylge leitud, anname talle vaikimisi väärtuse
            //Hiljemalt täiendasime seda nii, et vaikimisi väärtus on mingi lehekülg, mis 
            //teema peale vajutades esimesena ette tuleb...
            $vastuseksSaadudRidaValitudLehekyljeTeemale = saaVaikimisiLehekylg($vastuseksSaadudRidaValitudMenyyTeemale['teema_ID'], $andmebaasiYhendus);
        }
        elseif (isset($_GET['lehekylg_ID']))
        {
            $vastuseksSaadudRidaValitudMenyyTeemale = NULL;
            $vastuseksSaadudRidaValitudLehekyljeTeemale = saaValitudLehekyljeIDJargiVastavAndmebaasiRida($_GET['lehekylg_ID']);
        }
        else
        {
            $vastuseksSaadudRidaValitudMenyyTeemale = NULL;
            $vastuseksSaadudRidaValitudLehekyljeTeemale = NULL;
        }
     }
     
     function saaVaikimisiLehekylg($teema_ID, $andmebaasiYhendus)
     {
         $lehekyljedTeemaAll = valjastaKoikLehedMisMenyyTeemaAll($teema_ID, $andmebaasiYhendus, true);
         if ($esimeneLehekylg = mysql_fetch_array($lehekyljedTeemaAll))
         {
             return $esimeneLehekylg;
         }
         else 
         {
             //s.t. lehekülg mingi teema all puudub, või ei ole nähtav. 
             return NULL; 
         }
     }
     
     function lehekyljelNavigeerimine($vastuseksSaadudRidaValitudMenyyTeemale, $vastuseksSaadudRidaValitudLehekyljeTeemale, $avalikVeebileht = false)
     {
         //Loome ühe pika stringi, mitte ei lase funktsioonil siin midagi 
         //väljundisse otse genereerida. S.t. vahetame kõik echod muutujanime 
         //$valjastatavTekst -iga ära.
        global $andmebaasiYhendus;
        $valjastatavTekst = '<ul class="menyyTeemad">';
        $vastuseksSaadudMenyyTeemad = valjastaKoikMenyyTeemad($andmebaasiYhendus);

        //Kasuta andmebaasilt saadud andmeid, kui neid oli
        while ($ridaVastuseksSaadudMenyyTeemadest = mysql_fetch_array($vastuseksSaadudMenyyTeemad))
        {
            $valjastatavTekst .= '<li';
            if ($ridaVastuseksSaadudMenyyTeemadest['teema_ID'] == $GLOBALS['vastuseksSaadudRidaValitudMenyyTeemale']['teema_ID'])
            {
                //Vaadake, et tühikut ei unusta, muidu tekib liclass, mis ei tähenda midagi
                $valjastatavTekst .= ' class="valitud"';
            }
            $valjastatavTekst .= '><a href=Muuda_menyy_teemat.php?teema_ID=' . urlencode($ridaVastuseksSaadudMenyyTeemadest['teema_ID']) . '>'
                . $ridaVastuseksSaadudMenyyTeemadest['teema_nimi'] . '</a></li>';

            $lehekyljedMisTeemadeAllTulemus = valjastaKoikLehedMisMenyyTeemaAll(
                    $ridaVastuseksSaadudMenyyTeemadest['teema_ID'], $andmebaasiYhendus);
            $valjastatavTekst .= '<ul class="lehekyljed">';
            //Kasuta andmebaasilt saadud andmeid
            while ($ridaLehekyljestMingiTeemaAll = mysql_fetch_array($lehekyljedMisTeemadeAllTulemus))
            {
                $valjastatavTekst .= '<li';
                    if ($ridaLehekyljestMingiTeemaAll['lehekylg_ID'] == $GLOBALS['vastuseksSaadudRidaValitudLehekyljeTeemale']['lehekylg_ID'])
                    {
                        $valjastatavTekst .= ' class="valitud"';
                    }
                $valjastatavTekst .= '><a href=sisu.php?lehekylg_ID=' . urlencode($ridaLehekyljestMingiTeemaAll['lehekylg_ID']) . '>'
                        . $ridaLehekyljestMingiTeemaAll['lehekylje_teema_nimi'] . '</a></li>';
            }
            $valjastatavTekst .= '</ul>';
        }
        $valjastatavTekst .= '</ul>';
        //Nüüd tagastame väljastatava teksti
        return $valjastatavTekst;
     }
     
     /*
      * Andmebaasi programmi kaudu andmete lisamisel tekib probleeme sellega, 
      * kui väljadesse lisatakse infot, mida andmebaas tegelikult oma operaatoritena
      * kasutab (näiteks ' "" ja teised).
      * See aga võimaldab väga kergelt SQL injectionit ehk häkkerluse üht vormi 
      * harrastada. Seepeale on internetist võimalik leida funktsioone, mis andmebaasi
      * teksti lisades neid ohte mõnevõrra vähendavad. Üks selline funktsioon, mida me
      * laias internetis soovitatakse on järgmine. Allikas
      * mysql_prep() - github [WWW] https://gist.github.com/1504031 (27.01.2013);
      * 
      * Meid rohkem detailid ei huvita, kuid mida teadma peame on see, et see funktsioon
      * aitab meil andmebaasi korrektseid andmeid sisestada ning häkkimise tõenäosust
      * vähendada.
      */
    function mysql_prep($value)
    {
        $magic_quotes_active = get_magic_quotes_gpc();//boolean - true if the quotes thing is turned on
        $new_enough_php = function_exists("mysql_real_escape_string");//boolean - true if the function exists (php 4.3 or higher)
        if ($new_enough_php)
        {
            if ($magic_quotes_active)
            {
                $value = stripslashes($value);//if its a new version of php but has the quotes thing running, then strip the slashes it puts in
            }
            $value = mysql_real_escape_string($value);//if its a new version use the function to deal with characters
        }
        else
        {
            if (!$magic_quotes_active)//If its an old version, and the magic quotes are off use the addslashes function
            {
               $value = addslashes($value);
            }
        }
        return $value;
    }
    
    function suunaKasutajaEtteantudLehele($etteantav_leht)
    {
        //Kui asukoht on olemas, siis ainult lähme sinna
        if ($etteantav_leht)
        {
            header('Location:' . $etteantav_leht);
            exit;
        }
    }
    
//-------------------VORMIFUNKTSIOONID------------------------------------------
    //Siia tulnud massiivi puhul peame teadma, et massiivis viidatud elemendinimed
    //peavad klappima konkreetsele lehele postitatud elementide nimedega.
   
    function kontrolliEtNoutudValjadOleksTaidetud($noutudValjadeMassiiv)
    {
        $vigasedValjad = array();
        foreach($noutudValjadeMassiiv as $valjanimi)
        {
            if (!isset($_POST[$valjanimi]) || (empty($_POST[$valjanimi]) 
                    && $_POST[$valjanimi] != 0)) 
            {
                $vigasedValjad[] = $valjanimi;
            }
        }
        return $vigasedValjad;
    }
    
    function kontrolliKasValjalOnPiirangugaSeatudPikkus($massiivValjadestMillelPikkusPiiratud)
    {
        $vigasedValjad = array();
        foreach ($massiivValjadestMillelPikkusPiiratud as $valjanimi => $maksimaalnePikkus)
        {
            if ($maksimaalnePikkus < strlen(trim(mysql_prep($_POST[$valjanimi]))))
            {
                $vigasedValjad[] = $valjanimi;
            }
        }
        return $vigasedValjad;
    }
    
    function valjadeTaitmiseVigadeKuvamine($vigadeMassiiv)
    {
        echo '<p class="errors">';
        echo 'Järgmistel väljadel esineb vigu: <br/>';
        foreach ($vigadeMassiiv as $viganeVali)
        {
            echo $viganeVali . '<br/>';
        }
        echo '<br/>';
    }
    
    function avalikulLehekyljelNavigeerimine($vastuseksSaadudRidaValitudMenyyTeemale, $vastuseksSaadudRidaValitudLehekyljeTeemale, $andmebaasiYhendus, $avalikVeebileht = true)
    {
        $valjund = '<ul class="menyyTeemadPealehel">';
        $koikideTeemadeHulk = valjastaKoikMenyyTeemad($andmebaasiYhendus, $avalikVeebileht);
        while ($menyyTeema = mysql_fetch_array($koikideTeemadeHulk)) 
        {
            $valjund .= '<div class="menyyLiYmberDiv"><li';
            if ($menyyTeema['teema_ID'] == $vastuseksSaadudRidaValitudMenyyTeemale['teema_ID'])
            {
                $valjund .= ' class="valitud"';
            }
            $valjund .= '><a href="index.php?teema_ID=' . urlencode($menyyTeema["teema_ID"]) .
                    '"><div class="menyyHoverPealehel"><div';
            if ($menyyTeema['teema_ID'] == $vastuseksSaadudRidaValitudMenyyTeemale['teema_ID'])
            {
                $valjund .= ' class="valitudDiv"';
            }

            $valjund .= '>' . $menyyTeema["teema_nimi"] . '</div></div></a></li></div>';
            if ($menyyTeema['teema_ID'] == $vastuseksSaadudRidaValitudLehekyljeTeemale['teema_ID'])
            {
                //NB! SIIN ÜKS PARAMEETER JUURDE PANDUD MEETODILE!!!
                $lehekyljedKindlaMenyyTeemaAll = valjastaKoikLehedMisMenyyTeemaAll($menyyTeema["teema_ID"], $andmebaasiYhendus, $avalikVeebileht);
                $valjund .= '<ul class="menyyAllOlevadLehedPealehel">';
                while ($lehekylg = mysql_fetch_array($lehekyljedKindlaMenyyTeemaAll))
                {
                    $valjund .= '<div class="menyyAlusteLehtedeLiYmberDiv"><li';
                    if ($lehekylg['lehekylg_ID'] == $vastuseksSaadudRidaValitudLehekyljeTeemale['lehekylg_ID'])
                    {
                        $valjund .= ' class="valitud"';
                    }
                    $valjund .= '><a href="index.php?lehekylg_ID=' . urlencode($lehekylg["lehekylg_ID"]) . '"><div class="menyyHoverPealehel"><div';
                    if ($lehekylg['lehekylg_ID'] == $vastuseksSaadudRidaValitudLehekyljeTeemale['lehekylg_ID'])
                    {
                        $valjund .= ' class="valitudDiv"';
                    }

                    $valjund .= '>' . $lehekylg["lehekylje_teema_nimi"] . '</div></div></a></li><div>';
                }
                $valjund .= '</ul>';
            }
        }
        $valjund .= "</ul>";
        return $valjund;
    }
?>
